package com.baizhi.shane.shane.service;

import com.baizhi.shane.shane.dto.AnswerMyPostedOutDTO;
import com.baizhi.shane.shane.entity.ShaneAnswer;
import com.baizhi.shane.shane.vo.*;
import com.baizhi.shane.sys.vo.IdVO;
import com.baizhi.shane.sys.vo.SuccessedOutVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author wbz12
* @description 针对表【shane_answer(啥呢回答表)】的数据库操作Service
* @createDate 2023-07-25 22:33:37
*/
public interface ShaneAnswerService extends IService<ShaneAnswer> {

    /**
     * 通过关键字模糊查询回答列表
     *
     * @Author 闻柏智
     * @Date 21:27 2024/1/22
     * @Param pageInVO
     * @return java.util.List<com.baizhi.shane.shane.vo.PageAnswerOutVO>
     **/
    List<PageAnswerOutVO> pageByContent(PageInVO pageInVO);

    /**
     * 通过问题ID列表查询这些问题的点赞数量
     *
     * @Author 闻柏智
     * @Date 20:28 2024/1/21
     * @Param answerIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getAnswerLikeCountByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID查询单个回答的点赞数量
     *
     * @Author 闻柏智
     * @Date 20:35 2024/1/21
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneAnswerLikeCountByAnswerId(Long answerId);

    /**
     * 通过问题ID列表查询这些问题的点赞数量，并且转化成Map
     *
     * @Author 闻柏智
     * @Date 20:36 2024/1/21
     * @Param questionIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getAnswerLikeCountMapByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID列表查询这些回答的反对数量
     *
     * @Author 闻柏智
     * @Date 21:01 2024/1/21
     * @Param answerIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getAnswerAgainstCountByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID查询单个回答的反对数量
     *
     * @Author 闻柏智
     * @Date 21:03 2024/1/21
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneAnswerAgainstCountByAnswerId(Long answerId);

    /**
     * 通过问题ID列表查询这些问题的点赞数量，并且转化成Map
     *
     * @Author 闻柏智
     * @Date 21:04 2024/1/21
     * @Param answerIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getAnswerAgainstCountMapByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID列表查询这些回答的收藏数量
     *
     * @Author 闻柏智
     * @Date 15:27 2024/1/22
     * @Param answerIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getAnswerCollectCountByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID列表查询这些回答的收藏数量，并且转为Map
     *
     * @Author 闻柏智
     * @Date 15:29 2024/1/22
     * @Param answerIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getAnswerCollectCountMapByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID查询单个回答的收藏数量
     *
     * @Author 闻柏智
     * @Date 15:33 2024/1/22
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneAnswerCollectCountByAnswerId(Long answerId);

    /**
     * 通过回答ID列表查询这些回答的评论数量
     *
     * @Author 闻柏智
     * @Date 15:37 2024/1/22
     * @Param answerIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getAnswerCommentCountByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID列表查询这些回答的评论数量，并且转成Map
     *
     * @Author 闻柏智
     * @Date 15:39 2024/1/22
     * @Param answerIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getAnswerCommentCountMapByAnswerIdList(List<Long> answerIdList);

    /**
     * 通过回答ID列表查询这些回答的评论数量
     *
     * @Author 闻柏智
     * @Date 15:40 2024/1/22
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneAnswerCommentCountByAnswerId(Long answerId);

    /**
     * 通过ID查询单个回答信息
     *
     * @Author 闻柏智
     * @Date 16:11 2024/2/29
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.GetOneAnswerOutVO
     **/
    GetOneAnswerOutVO getOneAnswerById(Long answerId);

    /**
     * 新增一个回答
     *
     * @Author 闻柏智
     * @Date 17:14 2024/3/1
     * @Param answerInsertInVO
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO insertOne(AnswerInsertInVO answerInsertInVO);

    /**
     * 我发布过的回答
     *
     * @Author 闻柏智
     * @Date 21:32 2024/3/3
     * @Param
     * @return java.util.List<com.baizhi.shane.shane.dto.AnswerMyPostedOutDTO>
     **/
    List<AnswerMyPostedOutDTO> myPosted();

    /**
     * 通过ID编辑回答
     *
     * @Author 闻柏智
     * @Date 22:42 2024/3/3
     * @Param shaneAnswer
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO updateOneById(ShaneAnswer shaneAnswer);

    /**
     * 我收藏的回答
     *
     * @Author 闻柏智
     * @Date 14:32 2024/3/4
     * @Param
     * @return java.util.List<com.baizhi.shane.shane.entity.ShaneAnswer>
     **/
    List<AnswerMyPostedOutDTO> myCollected();

    /**
     * 通过回答ID列表查询这些回答的标签列表
     *
     * @Author 闻柏智
     * @Date 15:23 2024/3/4
     * @Param idListStr
     * @return java.util.List<com.baizhi.shane.shane.vo.AnswerLabelOutVO>
     **/
    List<AnswerLabelOutVO> getAnswerLabelListByAnswerIdList(String idListStr);

    /**
     * 通过回答ID查询单个回答的标签
     *
     * @Author 闻柏智
     * @Date 15:38 2024/3/4
     * @Param answerId
     * @return com.baizhi.shane.shane.vo.AnswerLabelOutVO
     **/
    AnswerLabelOutVO getAnswerLabelByAnswerId(Long answerId);

    /**
     * 通过关键字查询回答列表的元素数量和分页个数
     *
     * @Author 闻柏智
     * @Date 16:06 2024/3/4
     * @Param pageInVO
     * @return com.baizhi.shane.shane.vo.CountAndPageOutVO
     **/
    CountAndPageOutVO countAndPageByContent(PageInVO pageInVO);

    /**
     * 删除一个回答-通过ID
     *
     * @Author 闻柏智
     * @Date 16:13 2024/3/4
     * @Param idVO
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO deleteOneAnswerById(IdVO idVO);
}
